package _02_linked_list.exerc.remove;

import _02_linked_list.exerc.ListNode;
import org.junit.Test;

/**
 * @author: mornd
 * @dateTime: 2023/6/3 - 10:40
 * 有序链表去重（重复节点只留1个）
 */
public class MyTest3 {
    @Test
    public void test() {
        ListNode list = MyTest.init(new int[]{1,2,2,3,4,4});
        System.out.println(list);

//        System.out.println(foo1(list));
        System.out.println(foo2(list));
    }

    // 方式1
    ListNode foo1(ListNode listNode) {
        if(listNode == null || listNode.next == null) {
            return null;
        }

        ListNode p1 = listNode;
        ListNode p2;
        while ((p2 = p1.next) != null) {
            if(p1.val == p2.val) {
                p1.next = p2.next;
            } else {
                p1 = p1.next;
            }
        }
        return listNode;
    }

    // 方式2  递归实现
    ListNode foo2(ListNode listNode) {
        if(listNode == null || listNode.next == null) {
            return listNode;
        }
        ListNode last = foo2(listNode.next);
        if(listNode.val == listNode.next.val) {
            return last;
        } else {
            listNode.next = last;
            return listNode;
        }
    }
}
